<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Promise 是异步编程的一种解决方案

    // Promise对象(p) 的拓展方法   

    // then(callback1,callback2)   => p.then()  提前规定好了 Promise实例状态改变时要执行的 内容()
    // callback1  当Primise实例/对象的状态 由进行中(pending) 改为 已成功(fulfilled) => 执行callback1
    // callback2  当Primise实例/对象的状态 由进行中(pending) 改为 已失败(rejected)   => 执行callback2

    // callback1()  callback2()  都有一个形参用于接收 Promise对象中存储的数据 

    // callback2  当Promise实例的状态由进行中 改为 已失败 是会执行此回调函数
    // (1) reject()  会将 Promise实例的状态改为rejected 并将传入的参数作为 Promise实例的存储数据(PromiseResult)  => 会执行callback2
    // (2) Promise构造函数可以捕获代码在执行过程出现的错误 => Promise实例的状态改为rejected 并将错误的信息作为 Promise实例的存储数据(PromiseResult)  => 会执行callback2


    // catch(callback)   => p.catch()  用于指定发生错误时的回调函数。  可以理解为 then方法的二次封装
    // p.then(null,callback) p.then(undefined,callback)

    // p.catch = function (callback) {
    //     this.then(null, callback)
    // }


    var p = new Promise(function (resolve, reject) {
        // aaaaa;
        setTimeout(function () {
            var num = 0.1;
            if (num >= 0.5) {
                resolve(num);  // 不拖堂
            } else {
                reject(num);     //  拖堂
            }
            // console.log("异步代码执行完毕", p);
        }, 2000);
    });
    console.log(p);  // {pending}

    // p.then(function (data) {
    //     console.log("已成功:说不拖就不拖", data);
    // }, function (data) {
    //     console.log("已失败:该拖还要拖,学习使我快乐!", data);
    // });

    p.catch(function (data) {
        console.log("已失败:该拖还要拖,学习使我快乐!", data);
    });





</script>

</html>